package day17.UDP_TCPdemo.TCP.CS;

import java.net.ServerSocket;
import java.net.Socket;

public class Serverdemo1
{
    public static void main(String[] args) throws Exception
    {
//        单发单收
//        System.out.println("服务端启动");
//        ServerSocket ss=new ServerSocket(8080);//为服务端注册端口
//        Socket socket =ss.accept();//等待（阻塞式）客户端的连接，成功就会返回服务端的Socket对象
//        InputStream is = socket.getInputStream(); //管道具有输入流是他的性质，我只是转化成一个更符合我目的的流
//        DataInputStream dis = new DataInputStream(is);
//
//        System.out.println(dis.readInt());//等客户端发送的int数据，一定要对应！！！
//        System.out.println(dis.readUTF());
//
//        System.out.println("id:"+socket.getLocalAddress().getHostAddress());
//        System.out.println("port:"+socket.getPort());




        // 多发多收
 //               //服务端不要关管道，客户端关就行了
        //               多发多收，TCP模式收多个客户端的信息，至于为什么使用while（true）无法做到是因为，
        //               客户端这个是单线程的（main），就算你外面再套一个while（true）他也没法抛出里面那个啊，所以没意义
        //              不如服务端的主线程来接收管道，然后传管道给子线程的run方法里面去做事
        System.out.println();
        System.out.println("服务端启动");

            ServerSocket ss=new ServerSocket(8080);//作用：为服务端注册端口，就是一个口子，让管道插进来
            while (true)
            {
                Socket socket =ss.accept();//等待（阻塞式）客户端管道的连接，成功就会返回与客户端已经连接上的服务端Socket管道对象(两个端各自都有一个socket，连接上就类似与两个管道对接了，我觉得这时候返回的是服务端的socket)往下做就说明已经连接上了，后续就是子线程接受客户端发来的信息，
                // 客户端关闭连接可能有一个格挡？（管道没废），这一行本身没事，也会传参给子线程，
                // 但是一旦进行读入操作也就是子线程的dis.readUTF()，就会抛异常，因为管道已经关闭了，所以就会被catch
                //new一个子线程，然后把socket传进去
                new ServerReader(socket).start();
                System.out.println("一个客户端上线了");
            }

//            InputStream is = socket.getInputStream(); //管道具有输入流是他的性质，我只是转化成一个更符合我目的的流
//            DataInputStream dis = new DataInputStream(is);
//
//            while(true)
//            {
//                System.out.println(dis.readUTF());//等着（阻塞）客户端发送的String数据
//                System.out.println("id:"+socket.getLocalAddress().getHostAddress());
//                System.out.println("port:"+socket.getPort());
//
//                System.out.println("*************************************");
//            }



    }
}
